package com.note.feng.leetcode.algorithms.easy.nine;

public class NineHundredFourtyOne {
    /**
     * 941 有效的山脉数组
     * 给定一个整数数组 arr，如果它是有效的山脉数组就返回 true，否则返回 false。
     *
     * 让我们回顾一下，如果 arr 满足下述条件，那么它是一个山脉数组：
     *
     * arr.length >= 3
     * 在 0 < i < arr.length - 1 条件下，存在 i 使得：
     * arr[0] < arr[1] < ... arr[i-1] < arr[i]
     * arr[i] > arr[i+1] > ... > arr[arr.length - 1]
     *
     * 示例 1：
     *
     * 输入：arr = [2,1]
     * 输出：false
     * 示例 2：
     *
     * 输入：arr = [3,5,5]
     * 输出：false
     * 示例 3：
     *
     * 输入：arr = [0,3,2,1]
     * 输出：true
     *
     * 提示：
     *
     * 1 <= arr.length <= 104
     * 0 <= arr[i] <= 104
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/valid-mountain-array
     */
    /**
     * 解法：双指针
     * 左指针从左开始，直到找到不是递增的元素
     * 有指针从右开始，直到找到不是递减的元素
     * 判断左右指针是否相等、并且左指针不是最右面元素、并且右指针不是最左面元素
     * @param arr
     * @return
     */
    public boolean validMountainArray(int[] arr) {
        int len = arr.length;
        if(len < 3){
            return false;
        }
        int left = 0,right = len - 1;
        while (left< len - 1){
            if(arr[left] < arr[left + 1]){
                left ++;
            }else{
                break;
            }
        }
        while (right > 0){
            if(arr[right] < arr[right - 1]){
                right --;
            }else{
                break;
            }
        }
        return left == right && left != len && right != len;
    }
}
